/* Universidade Federal de Campina Grande - UFCG
 * Centro de Engenharia El�trica e Inform�tica - CEEI
 * Departamento de Sistemas e Computa��o - DSC
 * Curso: Ci�ncia da Computa��o
 * Disciplina: Desenvolvimento de Aplica��es Corporativas Avan�adas (2008.1)
 * Professor: Jacques Philippe Sauv�
 * Monitor: Guilherme Mauro Germoglio Barbosa
 * Alunos: Daniel Souza Coelho
 * 		   Everton Leandro Galdino Alves
 * 		   Odilon Francisco de Lima Junior	
 */

package lembrete.core.dao;

import java.io.FileNotFoundException;
import java.util.ArrayList;

import lembrete.core.beans.Entrada;
import lembrete.core.beans.Usuario;
import lembrete.core.exceptions.ExcecaoBD;
import lembrete.core.exceptions.ExcecaoParametroInvalido;

/**
 * Essa classe representa a interface UsuarioDao, que possui os metodos
 * que fazem a comunicacao entre a parte do usuario do sistema e o banco de dados.
 *  
 * @author Everton Leandro <br>
 *         Odilon Francisco <br>
 *         Daniel Coelho <br>
 * @version 1.0 
 */
public interface UsuarioDao extends Dao {

	public static String CAMINHO_BD = ".";
	
	/**
	 * Adiciona usuario ao banco de dados.
	 * 
	 * @param usuario
	 * @throws ExcecaoBD
	 * @throws FileNotFoundException
	 */
	public void adicionaUsuario(Usuario usuario)  throws ExcecaoBD, FileNotFoundException;
	
	/**
	 * Procura um usuario com o email passado.
	 * 
	 * @param email
	 * @return usuario procurado
	 * @throws ExcecaoBD
	 */
	public Usuario procuraUsuario(String email) throws ExcecaoBD;

	/**
	 * Adiciona entrada na agenda do usuario.
	 * 
	 * @param email
	 * @param nome
	 * @param telefone
	 * @param aniversario
	 * @return id da entrada
	 * @throws ExcecaoBD
	 * @throws FileNotFoundException
	 */
//	public Long adicionaEntrada(String email, String nome,
//			String telefone, String aniversario, Long id) throws ExcecaoBD, FileNotFoundException ;

	/**
	 * Procura um contato com os dados passados
	 * 
	 * @param email
	 * @param idContato
	 * @param nomeAtributo
	 * @return contato como string
	 * @throws ExcecaoBD
	 * @throws ExcecaoParametroInvalido
	 */
	public String buscaContato(String email, String idContato, String nomeAtributo)throws ExcecaoBD, ExcecaoParametroInvalido;

	/**
	 * Converte uma entrada em string
	 * 
	 * @param emailUsuario
	 * @param idEntrada
	 * @return entrada como string
	 * @throws ExcecaoBD
	 */
	public String visualizarEntrada(String emailUsuario, String idEntrada)throws ExcecaoBD ;

	/**
	 * Atualiza os valores de uma entrada
	 * 
	 * @param emailUsuario
	 * @param idEntrada
	 * @param campoAntigo
	 * @param novoCampo
	 * @throws ExcecaoBD
	 * @throws ExcecaoParametroInvalido
	 * @throws FileNotFoundException
	 */
	public void editarEntrada(String emailUsuario, String idEntrada,
			String campoAntigo, String novoCampo) throws ExcecaoBD, ExcecaoParametroInvalido, FileNotFoundException;


	/**
	 * Passa o id do grupo para o usuario
	 * 
	 * @param idGrupo
	 * @param gerenteEmail
	 * @throws ExcecaoBD
	 */
	public void conectaUsuarioGrupo(Long idGrupo, String gerenteEmail)  throws ExcecaoBD, FileNotFoundException;

	/**
	 * Obtem uma entrada da agenda do usuario, a partir do id.
	 * 
	 * @param idUsuario
	 * @param entradaId
	 * @return entrada
	 * @throws ExcecaoBD
	 */
	public Entrada getEntrada(String idUsuario, String entradaId) throws ExcecaoBD ;

	/**
	 * Salva no bd as modificacoes feitas
	 * 
	 * @throws FileNotFoundException
	 * @throws ExcecaoBD
	 */
	public void salvaModificacoes() throws FileNotFoundException, ExcecaoBD ;

	/**
	 * Exclui uma entrada do grupo.
	 * 
	 * @param emailUsuario
	 * @param idGrupo
	 * @param idEntrada
	 * @throws ExcecaoBD
	 * @throws FileNotFoundException
	 */
	public void excluirEntrada(String emailUsuario, String idGrupo,
			String idEntrada)throws ExcecaoBD, FileNotFoundException;
	
	/**
	 * Obtem usuario a partir de uma entrada.
	 * 
	 * @param idEntrada
	 * @return usuario pedido
	 * @throws ExcecaoBD
	 */
	public Usuario getUsuarioPorEntrada(String idEntrada) throws ExcecaoBD;
	
	/**
	 * Adiciona uma entrada a agenda do usuario
	 * 
	 * @param email
	 * @param nome
	 * @param telefone
	 * @param aniversario
	 * @param idEnt
	 * @throws ExcecaoBD
	 * @throws FileNotFoundException
	 */
	public void adicionaEntrada(String email,String nome, String telefone,
			String aniversario, Long idEnt) throws ExcecaoBD, FileNotFoundException;

	public void excluiEntrada(String idEntrada)throws ExcecaoBD , FileNotFoundException;

	public ArrayList<Usuario> getusuarios();

	public void removeMsg(String email, String descricao)throws FileNotFoundException, ExcecaoBD;
	

}
